package com.yidu.SystemManagement.mapper;

import com.yidu.SystemManagement.entity.Menu;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * 权限功能 mapper
 * @author 任俊杰
 * @version 1.0
 * @date 2022/12/11
 */
@Mapper
public interface MenuMapper {

    /**
     * 新增权限功能
     * @param menu 权限功能对象
     * @return i 受影响的行数
     */
    @Insert("insert into menu values(#{menuId},#{parentMenuId},#{menuType},#{menuName},#{menuClass},#{menuUrl},#{Remark})")
    public int addMenu(Menu menu);

    /**
     * 删除权限供能
     * @param menuId 权限功能id
     * @return i 受影响的行数
     */
    @Delete("delete from menu where menuId=#{menuId}")
    public int deleteMenu(String menuId);

    /**
     * 修改权限功能
     * @param menu 权限功能对象
     * @return  i 受影响的行数
     */
    @Update("update menu set parentMenuId=#{parentMenuId},menuType=#{menuType},menuName=#{menuName},menuClass=#{menuClass},menuUrl=#{menuUrl},Remark=#{Remark} where menuId=#{menuId}")
    public int updateMenu(Menu menu);

    /**
     * 查询权限功能
     * @param map 集合
     * @return list 集合
     */
    @Select("select * from menu WHERE 1=1 ${strWhere} LIMIT #{page},#{limit}")
    public List<Menu>selectMenu(Map map);

    /**
     * 模糊查询行数
     * @param map 集合
     * @return i 受影响的行数
     */
    @Select("select count(*) from menu where 1=1 ${strWhere}")
    public int selectMenuCount(Map map);


    /**
     * 查询父功能集合
     * @param map 集合
     * @return list 集合
     */
    @Select("SELECT m.*,u.`userName` FROM(SELECT * FROM USER WHERE userName=#{userName}) u " +
            "INNER JOIN userRoleMenu urm ON u.`userRoleId`=urm.`userRoleId`" +
            "INNER JOIN(SELECT * FROM menu WHERE menuType='mainMenu') m ON urm.`menuId`=m.`menuId`")
    public List<Menu>selectMainMenu(Map map);

    /**
     * 根据父功能查子功能模块
     * @param map 集合
     * @return list 集合
     */
    @Select("SELECT m.*,u.`userName` FROM(SELECT * FROM USER WHERE userName=#{userName}) u INNER JOIN userRoleMenu urm ON u.`userRoleId`=urm.`userRoleId` INNER JOIN(SELECT * FROM menu WHERE parentMenuId=#{parentMenuId} AND menuType='subMenu') m ON urm.`menuId`= m.`menuId`")
    public List<Menu>selectSubMenu(Map map);
}
